home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / PowerPlant / AGA Classes 1.2 / Sliders / LAGAPointedHSlider.cp < prev    next >
Text File  |  1996-06-30  |  18KB  |  614 lines

  1. // ===========================================================================
  2. //    LAGAPointedHSlider.cp
  3. // ===========================================================================
  4. //    “Apple Grayscale Appearance” compliant pointed horizontal slider control
  5. //    Copyright © 1996 Chrisoft (Christophe ANDRES)  All rights reserved.
  6. //
  7. //    You may use this source code in any application (commercial, shareware, freeware,
  8. //    postcardware, etc), but not remove this notice (no need to acknowledge the use of
  9. //    this class in the about box)
  10. //    You may not sell this source code in any form. This source code may be placed on 
  11. //    publicly accessable archive sites and source code disks. It may not be placed on 
  12. //    profit archive sites and source code disks without the permission of the author, 
  13. //    Christophe ANDRES.
  14. //    
  15. //        This source code is distributed in the hope that it will be useful,
  16. //        but WITHOUT ANY WARRANTY; without even the implied warranty of
  17. //        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  18. //
  19. //    If you make any change or improvement on this class, please send the improved/changed
  20. //    version to : chrisoft@calva.net or Christophe ANDRES
  21. //                                     20, rue Prosper Mérimée
  22. //                                     67100 STRASBOURG
  23. //                                     FRANCE
  24. //
  25. // ===========================================================================
  26. //    LAGAPointedHSlider.h            <- double-click + Command-D to see class declaration
  27. //
  28. //    LAGAPointedHSlider is my implementation of the “Apple Grayscale Appearance for System 7.5”
  29. //        horizontal pointed slider control
  30. //
  31. //        This class requires LAGASliderBase.cp to be present in your project
  32. //        This class requires AGAColors.cp to be present in your project
  33. //
  34. //        Version : 1.2
  35. //
  36. //        Change History (most recent first, date in US form : mm/dd/yy):
  37. //
  38. //                        06/30/96    ca        Public release of version 1.2
  39. //                        06/27/96    ca        Changed checks for disabled state (check on triState_On instead of triState_Off)
  40. //                                                            in order that triState_Latent state is drawn as disabled
  41. //                        06/04/96    ca        Added RegisterClass method to ease registry
  42. //                                                        Increased version to 1.2
  43. //                        05/16/96    ca        class made available by Christophe ANDRES <chrisoft@calva.net>
  44. //                                                        (version 1.1)
  45. //
  46. //        To Do:
  47. //                        A subclass that draws also some labels
  48. //
  49.  
  50. #include "LAGAPointedHSlider.h"
  51. #include "AGAColors.h"
  52. #include <UDrawingState.h>
  53. #include <PP_Types.h>
  54.  
  55. //    begin    <06/04/96    ca>
  56. void LAGAPointedHSlider::RegisterClass ()
  57.  
  58. {
  59.     URegistrar::RegisterClass(LAGAPointedHSlider::class_ID, (ClassCreatorFunc)LAGAPointedHSlider::CreateAGAPointedHSliderStream);
  60. }
  61. //    end    <06/04/96    ca>
  62.  
  63. LAGAPointedHSlider* LAGAPointedHSlider::CreateAGAPointedHSliderStream (LStream *inStream)
  64.  
  65. {
  66.     return(new LAGAPointedHSlider(inStream));
  67. }
  68.  
  69. //-------Constructors-------------------------------------------------------------------------------------------------
  70.  
  71. LAGAPointedHSlider::LAGAPointedHSlider ()
  72.  
  73. {
  74.     mVerticalSlider = false;
  75.     mDrawDivisions = false;
  76. }
  77.  
  78. LAGAPointedHSlider::LAGAPointedHSlider (LStream    *inStream) : LAGASliderBase(inStream)
  79.  
  80. {
  81.     unsigned char theBoolean;
  82.  
  83.     inStream->ReadData(&theBoolean, sizeof(unsigned char));
  84.     mDrawDivisions = (theBoolean != 0);
  85. }
  86.  
  87. LAGAPointedHSlider::LAGAPointedHSlider (const LAGAPointedHSlider &inOriginal) : LAGASliderBase(inOriginal)
  88.  
  89. {
  90.     mDrawDivisions = inOriginal.mDrawDivisions;
  91. }
  92.  
  93. LAGAPointedHSlider::LAGAPointedHSlider (const SPaneInfo    &inPaneInfo, MessageT inValueMessage, Boolean inBottomRightPointer,
  94.                                                                                 Boolean inDrawDivisions, Int32 inInitialValue, Int32 inMinValue, Int32 inMaxValue)
  95.                                                                             : LAGASliderBase(inPaneInfo, inValueMessage, false, inBottomRightPointer, inInitialValue,
  96.                                                                                                                 inMinValue, inMaxValue)
  97. {
  98.     mDrawDivisions = inDrawDivisions;
  99. }
  100.  
  101. //-------Drawers----------------------------------------------------------------------------------------------------
  102.  
  103. void LAGAPointedHSlider::DrawIndicator (Boolean inPushed)
  104.  
  105. {
  106.     StColorPenState theState;
  107.     Boolean hasColor = ::PaneInColor(this);
  108.     Boolean disabled = (mEnabled != triState_On);                                                                                                                //    <06/27/96    ca>
  109.     Rect frame;
  110.  
  111.     theState.Normalize();
  112.     CalcLocalFrameRect(frame);
  113.     
  114.     short position = GetIndicatorPosition();
  115.     
  116.     short origin = (mRightBottomPointing ? frame.top : frame.bottom - 1);
  117.     short direction = (mRightBottomPointing ? 1 : -1);
  118.     
  119.     ::SetRect(&frame, position - 7, (mRightBottomPointing ? origin : origin - 15), position + 7,
  120.                                         (mRightBottomPointing ? origin + 15 : origin));
  121.     if (hasColor)
  122.         ::RGBBackColor(&gAGAColorArray[2]);
  123.     ::EraseRect(&frame);
  124.     if (hasColor && !disabled)
  125.         {
  126.             Rect r = frame;
  127.             if (mRightBottomPointing)
  128.                 {
  129.                     r.top++;
  130.                     r.bottom -= 5;
  131.                 }
  132.             else
  133.                 r.top += 6;
  134.             r.left++;
  135.             r.right++;
  136.             ::RGBBackColor((inPushed ? &gAGAColorArray[8] : &gAGAColorArray[5]));
  137.             ::EraseRect(&r);
  138.             ::RGBForeColor((inPushed ? &gAGAColorArray[8] : &gAGAColorArray[5]));
  139.             ::MoveTo(position + 4, origin + (direction * 10));
  140.             ::Line(-8, 0);
  141.             ::Move(1, direction * 1);
  142.             ::Line(6, 0);
  143.             ::Move(-1, direction * 1);
  144.             ::Line(-4, 0);
  145.             ::Move(1, direction * 1);
  146.             ::Line(2, 0);
  147.         }
  148.     
  149.     if (disabled)
  150.         {
  151.             if (hasColor)
  152.                 ::RGBForeColor(&gAGAColorArray[8]);
  153.             else
  154.                 ::PenPat(&qd.gray);
  155.         }
  156.     else
  157.         ::ForeColor(blackColor);
  158.     ::MoveTo(position - 7, origin + (direction * 1));
  159.     ::Line(0, direction * 8);
  160.     if (!hasColor && disabled)
  161.         ::PenPat(&qd.black);
  162.     ::Line(6, direction * 6);
  163.     if (!hasColor && disabled)
  164.         ::PenPat(&qd.gray);
  165.     ::Line(2, 0);
  166.     if (!hasColor && disabled)
  167.         ::PenPat(&qd.black);
  168.     ::Line(6, direction * -6);
  169.     if (!hasColor && disabled)
  170.         ::PenPat(&qd.gray);
  171.     ::Line(0, direction * -8);
  172.     ::Move(-1, direction * -1);
  173.     ::Line(-12, 0);
  174.     
  175.     if (hasColor)
  176.         {
  177.             if (mRightBottomPointing)
  178.                 {
  179.                     ::RGBForeColor((disabled ? &gAGAColorArray[1] : (inPushed ? &gAGAColorArray[5] : &gAGAColorArray[3])));
  180.                     ::Move(1, 1);        ::Line(10, 0);
  181.                     ::Move(-11, 1);    ::Line(0, 7);
  182.                     if (!disabled)
  183.                         {
  184.                             ::Move(3, -1);    ::Line(0, -4);
  185.                             ::Move(2, 0);        ::Line(0, 4);
  186.                             ::Move(2, 0);        ::Line(0, -4);
  187.                         }
  188.                     ::RGBForeColor((disabled ? &gAGAColorArray[4] : (inPushed ? &gAGAColorArray[10] : &gAGAColorArray[8])));
  189.                     ::MoveTo(position + 6, origin + 2);
  190.                     ::Line(0, 7);
  191.                     ::Line(-5, 5);
  192.                     ::Line(-2, 0);
  193.                     ::Line(-4, -4);
  194.                     ::RGBForeColor((disabled ? &gAGAColorArray[W] : (inPushed ? &gAGAColorArray[3] : &gAGAColorArray[1])));
  195.                     ::Move(-1, -9);        ::Line(0, 0);
  196.                     if (!disabled)
  197.                         {
  198.                             ::Move(3, 2);        ::Line(0, 0);
  199.                             ::Move(2, 0);        ::Line(0, 0);
  200.                             ::Move(2, 0);        ::Line(0, 0);
  201.                             ::RGBForeColor((inPushed ? &gAGAColorArray[12] : &gAGAColorArray[10]));
  202.                             ::Move(1, 1);        ::Line(0, 5);
  203.                             ::Move(-2, 0);    ::Line(0, -5);
  204.                             ::Move(-2, 0);    ::Line(0, 5);
  205.                         }
  206.                 }
  207.             else
  208.                 {
  209.                     ::RGBForeColor((disabled ? &gAGAColorArray[4] : (inPushed ? &gAGAColorArray[10] : &gAGAColorArray[8])));
  210.                     ::Move(1, -1);        ::Line(11, 0);
  211.                     ::Line(0, -8);
  212.                     ::Line(-4, -4);
  213.                     ::RGBForeColor((disabled ? &gAGAColorArray[1] : (inPushed ? &gAGAColorArray[5] : &gAGAColorArray[3])));
  214.                     ::Move(-2, -1);        ::Line(0, 0);
  215.                     ::Move(-2, 1);        ::Line(-3, 3);
  216.                     ::Move(-1, 2);        ::Line(0, 6);
  217.                     if (!disabled)
  218.                         {
  219.                             ::Move(3, -2);    ::Line(0, -4);
  220.                             ::Move(2, 0);        ::Line(0, 4);
  221.                             ::Move(2, 0);        ::Line(0, -4);
  222.                         }
  223.                     ::RGBForeColor((disabled ? &gAGAColorArray[W] : (inPushed ? &gAGAColorArray[3] : &gAGAColorArray[1])));
  224.                     ::MoveTo(position - 1, origin - 14);
  225.                     ::Line(0, 0);
  226.                     ::Move(-5, 5);    ::Line(0, 0);
  227.                     if (!disabled)
  228.                         {
  229.                             ::Move(3, 0);        ::Line(0, 0);
  230.                             ::Move(2, 0);        ::Line(0, 0);
  231.                             ::Move(2, 0);        ::Line(0, 0);
  232.                             ::RGBForeColor((inPushed ? &gAGAColorArray[12] : &gAGAColorArray[10]));
  233.                             ::Move(1, 1);        ::Line(0, 5);
  234.                             ::Move(-2, 0);    ::Line(0, -5);
  235.                             ::Move(-2, 0);    ::Line(0, 5);
  236.                             ::RGBForeColor((inPushed ? &gAGAColorArray[8] : &gAGAColorArray[5]));
  237.                             ::Move(3, -11);    ::Line(0, 0);
  238.                         }
  239.                 }
  240.         }
  241.     else
  242.         if (!disabled)
  243.             {
  244.                 ::PenPat(&qd.black);
  245.                 ::Move(4, direction * 4);
  246.                 ::Line(0, direction * 5);
  247.                 ::Move(2, 0);
  248.                 ::Line(0, direction * -5);
  249.                 ::Move(2, 0);
  250.                 ::Line(0, direction * 5);
  251.             }
  252. }
  253.  
  254. Int16 LAGAPointedHSlider::FindHotSpot (Point inPoint)
  255.  
  256. {
  257.     Rect frame;
  258.     
  259.     //    The only hot spot we know of in a slider is the pointer
  260.     GetIndicatorRect(frame);
  261.                                         
  262.     return(::PtInRect(inPoint, &frame) ? 1 : 0);
  263. }
  264.  
  265. Boolean LAGAPointedHSlider::PointInHotSpot (Point inPoint, Int16 inHotSpot)
  266.  
  267. {
  268.     Rect frame;
  269.     
  270.     //    The only hot spot we know of in a slider is the pointer
  271.     GetIndicatorRect(frame);
  272.                                     
  273.     return(::PtInRect(inPoint, &frame));
  274. }
  275.  
  276. short LAGAPointedHSlider::GetIndicatorPosition ()
  277.  
  278. {
  279.     Rect frame;
  280.  
  281.     CalcLocalFrameRect(frame);
  282.     double size = (frame.right - frame.left) - 22;
  283.     double division = size / (double)(mMaxValue - mMinValue);
  284.     
  285.     return(frame.left + 11 + ((mValue - mMinValue) * division));
  286. }
  287.  
  288. void LAGAPointedHSlider::GetIndicatorRect (Rect &outRect)
  289.  
  290. {
  291.     Rect frame;
  292.     
  293.     CalcLocalFrameRect(frame);
  294.     short position = GetIndicatorPosition();
  295.     short origin = (mRightBottomPointing ? frame.top : frame.bottom - 1);
  296.     
  297.     ::SetRect(&outRect, position - 7, (mRightBottomPointing ? origin : origin - 15), position + 8,
  298.                                             (mRightBottomPointing ? origin + 16 : origin + 1));
  299. }
  300.  
  301. void LAGAPointedHSlider::InitializeGhost ()
  302.  
  303. {
  304.     Boolean hasColor = ::PaneInColor(this);
  305.     Rect r;
  306.  
  307.     LAGASliderBase::InitializeGhost();
  308.     
  309.     mGhostPointer->BeginDrawing();
  310.     
  311.     if (hasColor)
  312.         ::RGBBackColor(&gAGAColorArray[2]);
  313.     ::SetRect(&r, 0, 0, 15, 16);
  314.     ::EraseRect(&r);
  315.     
  316.     short origin = (mRightBottomPointing ? r.top : r.bottom - 1);
  317.     short direction = (mRightBottomPointing ? 1 : -1);
  318.     
  319.     if (hasColor)
  320.         ::RGBForeColor(&gAGAColorArray[7]);
  321.     ::MoveTo(0, origin + (direction * 1));
  322.     ::Line(0, direction * 8);
  323.     ::Line(6, direction * 6);
  324.     ::Line(2, 0);
  325.     ::Line(6, direction * -6);
  326.     ::Line(0, direction * -8);
  327.     ::Move(-1, direction * -1);
  328.     ::Line(-12, 0);
  329.     ::Move(12, direction * 4);
  330.     ::Line(0, 0);
  331.     ::Move(0, direction * 4);
  332.     ::Line(0, 0);
  333.     if (hasColor)
  334.         {
  335.             if (mRightBottomPointing)
  336.                 {
  337.                     ::RGBForeColor(&gAGAColorArray[5]);
  338.                     ::Move(-1, 0);    ::Line(-2, 0);
  339.                     ::Move(0, -4);    ::Line(2, 0);
  340.                     ::Move(-3, 1);    ::Line(0, 2);
  341.                     ::Move(0, 2);        ::Line(0, 0);
  342.                     ::Move(-2, 0);    ::Line(0, 0);
  343.                     ::Move(0, -2);    ::Line(0, -2);
  344.                     ::Move(-2, 0);    ::Line(0, 2);
  345.                     ::Move(0, 2);        ::Line(0, 0);
  346.                     ::Move(-2, -1);    ::Line(-1, 0);
  347.                     ::Move(0, -4);    ::Line(1, 0);
  348.                     ::RGBForeColor(&gAGAColorArray[4]);
  349.                     ::Move(-1, 6);    ::Line(4, 4);
  350.                     ::Line(2, 0);        ::Line(5, -5);
  351.                     ::Move(0, -2);    ::Line(0, -2);
  352.                     ::Move(0, -2);    ::Line(0, -1);
  353.                     ::RGBForeColor(&gAGAColorArray[11]);
  354.                     ::Move(1, 2);        ::Line(0, 0);
  355.                     ::Move(0, 4);        ::Line(0, 0);
  356.                     ::Move(-14, 0);    ::Line(0, 0);
  357.                     ::Move(0, -4);    ::Line(0, 0);
  358.                     ::RGBForeColor(&gAGAColorArray[1]);
  359.                     ::Move(1, -3);    ::Line(0, 0);
  360.                     ::RGBForeColor(&gAGAColorArray[9]);
  361.                     ::Move(4, 3);        ::Line(0, 0);
  362.                     ::Move(0, 4);        ::Line(0, 0);
  363.                     ::Move(2, 0);        ::Line(0, 0);
  364.                     ::Move(0, -4);    ::Line(0, 0);
  365.                     ::Move(2, 0);        ::Line(0, 0);
  366.                     ::Move(0, 4);        ::Line(0, 0);
  367.                     ::ForeColor(whiteColor);
  368.                     ::Move(-1, -1);    ::Line(0, -2);
  369.                     ::Move(0, -2);    ::Line(0, 0);
  370.                     ::Move(-2, 0);    ::Line(0, 0);
  371.                     ::Move(0, 2);        ::Line(0, 2);
  372.                     ::Move(-2, 0);    ::Line(0, -2);
  373.                     ::Move(0, -2);    ::Line(0, 0);
  374.                     ::Move(-3, 6);    ::Line(0, 0);
  375.                     ::Move(0, -2);    ::Line(0, -2);
  376.                     ::Move(0, -2);    ::Line(0, -1);
  377.                     ::Move(1, -1);    ::Line(10, 0);
  378.                 }
  379.             else
  380.                 {
  381.                     ::RGBForeColor(&gAGAColorArray[5]);
  382.                     ::Move(-1, 0);    ::Line(-2, 0);
  383.                     ::Move(0, 4);        ::Line(2, 0);
  384.                     ::Move(-3, 1);    ::Line(0, 0);
  385.                     ::Move(0, -2);    ::Line(0, -2);
  386.                     ::Move(-2, 0);    ::Line(0, 2);
  387.                     ::Move(0, 2);        ::Line(0, 0);
  388.                     ::Move(-2, 0);    ::Line(0, 0);
  389.                     ::Move(0, -2);    ::Line(0, -2);
  390.                     ::Move(-2, -1);    ::Line(-1, 0);
  391.                     ::Move(0, 4);        ::Line(1, 0);
  392.                     ::RGBForeColor(&gAGAColorArray[4]);
  393.                     ::Move(-1, 3);    ::Line(11, 0);
  394.                     ::Line(0, -2);
  395.                     ::Move(0, -2);    ::Line(0, -2);
  396.                     ::Move(0, -2);    ::Line(-4, -4);
  397.                     ::RGBForeColor(&gAGAColorArray[1]);
  398.                     ::Move(-2, -1);    ::Line(0, 0);
  399.                     ::RGBForeColor(&gAGAColorArray[9]);
  400.                     ::Move(2, 6);        ::Line(0, 0);
  401.                     ::Move(0, 4);        ::Line(0, 0);
  402.                     ::Move(-2, 0);    ::Line(0, 0);
  403.                     ::Move(0, -4);    ::Line(0, 0);
  404.                     ::Move(-2, 0);    ::Line(0, 0);
  405.                     ::Move(0, 4);        ::Line(0, 0);
  406.                     ::RGBForeColor(&gAGAColorArray[11]);
  407.                     ::Move(-5, 0);    ::Line(0, 0);
  408.                     ::Move(0, -4);    ::Line(0, 0);
  409.                     ::Move(14, 0);    ::Line(0, 0);
  410.                     ::Move(0, 4);        ::Line(0, 0);
  411.                     ::ForeColor(whiteColor);
  412.                     ::Move(-6, -1);    ::Line(0, -2);
  413.                     ::Move(0, -2);    ::Line(0, 0);
  414.                     ::Move(-2, 0);    ::Line(0, 0);
  415.                     ::Move(0, 2);        ::Line(0, 2);
  416.                     ::Move(-2, 0);    ::Line(0, -2);
  417.                     ::Move(0, -2);    ::Line(0, 0);
  418.                     ::Move(2, -5);    ::Line(-5, 5);
  419.                     ::Move(0, 2);        ::Line(0, 2);
  420.                     ::Move(0, 2);        ::Line(0, 1);
  421.                 }
  422.         }
  423.     
  424.     mGhostPointer->EndDrawing();
  425.  
  426.     //    Define a region to draw the pointer nicely if the ghost passes on its top
  427.     mGhostMask = ::NewRgn();
  428.     ::OpenRgn();
  429.     ::MoveTo(0, origin + (direction * 1));
  430.     ::Line(0, direction * 8);
  431.     ::Line(6, direction * 6);
  432.     ::Line(2, 0);
  433.     ::Line(6, direction * -6);
  434.     ::Line(0, direction * -8);
  435.     ::Line(-1, direction * -1);
  436.     ::Line(-12, 0);
  437.     ::Line(-1, direction * 1);
  438.     ::CloseRgn(mGhostMask);
  439. }
  440.  
  441. void LAGAPointedHSlider::DrawGhost (Point inPoint)
  442.  
  443. {
  444.     Rect frame;
  445.     short position;
  446.  
  447.     if (inPoint.h != mLastPosition.h)
  448.         {
  449.             Rect indicRect, overStep;
  450.             
  451.             CalcLocalFrameRect(frame);
  452.             double size = (frame.right - frame.left) - 22;
  453.             double division = size / (double)(mMaxValue - mMinValue);
  454.             
  455.             short MaxPt = frame.left + 11 + ((mMaxValue - mMinValue) * division);
  456.             short MinPt = frame.left + 11;
  457.             short origin = (mRightBottomPointing ? frame.top : frame.bottom - 1);
  458.             if (inPoint.h > MaxPt)
  459.                 position = MaxPt;
  460.             else
  461.                 if (inPoint.h < MinPt)
  462.                     position = MinPt;
  463.                 else
  464.                     position = inPoint.h;
  465.             
  466.             frame.top = (mRightBottomPointing ? origin : origin - 15);
  467.             frame.bottom = frame.top + 16;
  468.             frame.left = position - 7;
  469.             frame.right = frame.left + 15;
  470.             
  471.             if (!::EmptyRect(&mLastGhost))
  472.                 {
  473.                     indicRect = mLastGhost;
  474.                     StClipRgnState clip;
  475.                     
  476.                     if (indicRect.left < frame.left)
  477.                         {
  478.                             if (indicRect.right > frame.left)
  479.                                 indicRect.right = frame.left;
  480.                         }
  481.                     else
  482.                         {
  483.                             if (frame.right > indicRect.left)
  484.                                 indicRect.left = frame.right;
  485.                         }
  486.                     clip.ClipToIntersection(indicRect);
  487.                     ::RGBBackColor(&gAGAColorArray[2]);
  488.                     ::EraseRect(&mLastGhost);
  489.                     DrawSlideTrack();
  490.                     GetIndicatorRect(indicRect);
  491.                     if (::SectRect(&indicRect, &mLastGhost, &overStep))
  492.                         DrawIndicator(true);
  493.                 }
  494.             
  495.             StColorPenState theState;
  496.             theState.Normalize();
  497.             mGhostPointer->CopyImage(GetMacPort(), frame);
  498.  
  499.             if ((!::EmptyRect(&overStep)) && (mGhostMask != nil))
  500.                 {
  501.                     StClipRgnState clip;
  502.                     ::OffsetRgn(mGhostMask, -(*mGhostMask)->rgnBBox.left, -(*mGhostMask)->rgnBBox.top);
  503.                     ::OffsetRgn(mGhostMask, frame.left, frame.top);
  504.                     RgnHandle theClipRegion = ::NewRgn();
  505.                     GetIndicatorRect(indicRect);
  506.                     ::RectRgn(theClipRegion, &indicRect);
  507.                     ::DiffRgn(theClipRegion, mGhostMask, theClipRegion);
  508.                     clip.ClipToIntersectionRgn(theClipRegion);
  509.                     DrawIndicator(true);
  510.                 }
  511.             mLastGhost = frame;
  512.             mLastPosition = inPoint;
  513.         }
  514. }
  515.  
  516. void LAGAPointedHSlider::FinishTrackHotSpot (Point inPoint)
  517.  
  518. {
  519.     Boolean hasColor = ::PaneInColor(this);
  520.     Rect frame, indicRect;
  521.     short newValue;
  522.  
  523.     CalcLocalFrameRect(frame);
  524.     double size = (frame.right - frame.left) - 22;
  525.     double division = size / (double)(mMaxValue - mMinValue);
  526.             
  527.     short MaxPt = frame.left + 11 + ((mMaxValue - mMinValue) * division);
  528.     short MinPt = frame.left + 11;
  529.     if (inPoint.h >= MaxPt)
  530.         newValue = mMaxValue;
  531.     else
  532.         if (inPoint.h <= MinPt)
  533.             newValue = mMinValue;
  534.         else
  535.             {
  536.                 newValue = ((inPoint.h - MinPt) / division) + mMinValue;
  537.                 short lowPos = frame.left + 11 + (newValue * division);
  538.                 short highPos = frame.left + 11 + ((newValue + 1) * division);
  539.                 if ((inPoint.h - lowPos) > (highPos - inPoint.h))
  540.                     newValue++;
  541.             }
  542.     
  543.     if (newValue != mValue)
  544.         {
  545.             StClipRgnState clip;
  546.             clip.Normalize();
  547.             GetIndicatorRect(indicRect);
  548.             if (hasColor)
  549.                 ::RGBBackColor(&gAGAColorArray[2]);
  550.             ::EraseRect(&indicRect);
  551.             ::EraseRect(&mLastGhost);
  552.             DrawSlideTrack();
  553.             //    Update our control value and Broadcast it
  554.             SetValue(newValue);
  555.         }
  556.     else
  557.         {
  558.             if (hasColor)
  559.                 ::RGBBackColor(&gAGAColorArray[2]);
  560.             ::EraseRect(&mLastGhost);
  561.             DrawSlideTrack();
  562.         }
  563.     //    We dont redraw the pointer here, because it will anyway be redrawn in the unpressed state
  564.     //    in the method LAGASliderBase::HotSpotResult
  565. }
  566.  
  567. void LAGAPointedHSlider::DrawLabels ()
  568.  
  569. {
  570.     if (mDrawDivisions)
  571.         {
  572.             StColorPenState theState;
  573.             Boolean hasColor = ::PaneInColor(this);
  574.             Boolean disabled = (mEnabled != triState_On);                                                                                                            //    <06/27/96    ca>
  575.             Rect frame;
  576.             CalcLocalFrameRect(frame);
  577.             
  578.             double size = (frame.right - frame.left) - 22;
  579.             double division = size / (double)(mMaxValue - mMinValue);
  580.             short step = 1;
  581.             if (division < 4)
  582.                 step = 2;
  583.             short origin = (mRightBottomPointing ? frame.top : frame.bottom - 1);
  584.             short direction = (mRightBottomPointing ? 1 : -1);
  585.             short position;
  586.             for (int i = mMinValue; i <= mMaxValue; i += step)
  587.                 {
  588.                     position = frame.left + 11 + ((i - mMinValue) * division);
  589.                     if (hasColor)
  590.                         ::RGBForeColor((disabled ? &gAGAColorArray[8] : &gAGAColorArray[B]));
  591.                     else
  592.                         if (disabled)
  593.                             ::PenPat(&qd.gray);
  594.                     
  595.                     ::MoveTo(position, origin + (direction * 17));
  596.                     ::Line(0, direction * 5);
  597.                     if (hasColor)
  598.                         {
  599.                             if (!mRightBottomPointing)
  600.                                 ::Move(0, 5);
  601.                             ::RGBForeColor((disabled ? &gAGAColorArray[4] : &gAGAColorArray[7]));
  602.                             ::Move(0, 1);
  603.                             ::Line(1, 0);
  604.                             ::Line(0, -6);
  605.                             ::ForeColor(whiteColor);
  606.                             ::Move(-1, -1);
  607.                             ::Line(-1, 0);
  608.                             ::Line(0, 6);
  609.                         }
  610.                 }
  611.         }
  612. }
  613.  
  614.